package br.com.equus.bean;

import java.util.Date;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.arquitetura.bean.PaginableBean;
import br.com.arquitetura.excecao.ExcecaoUtil;
import br.com.equus.entidade.Animal;
import br.com.equus.entidade.ManejoAnimal;
import br.com.equus.entidade.StatusExecucao;
import br.com.equus.entidade.StatusManejo;

@ManagedBean(name = "manejoExibicaoBean")
@ViewScoped
public class ManejoExibicaoBean extends PaginableBean<ManejoAnimal> {

	private static final long serialVersionUID = 1L;

	private Animal animal;

	private ManejoAnimal manejoAux;

	private String motivoCancelar;

	private String motivoFinalizar;

	private String motivoVisualizar;

	public ManejoExibicaoBean() {
	}

	@Override
	public void verificarAcesso() {
		acessoBean.bloquearTela("ROLE_MANEJO");
	}

	@PostConstruct
	public void carregarListas() {
		try {
			Integer idAnimal = (Integer) getSessionMap().remove("idAnimal");
			if (idAnimal != null) {
				animal = (Animal) universalManager.get(Animal.class, idAnimal);
			}

		} catch (Exception e) {
			ExcecaoUtil.tratarExcecao(e);
		}

	}

	@SuppressWarnings("unchecked")
	public String cancelar() {
		try {
			StatusManejo status = new StatusManejo();
			status.setDtCadastro(new Date());
			status.setManejoAnimal(new ManejoAnimal(manejoAux.getId()));
			status.setMotivo(motivoCancelar);
			status.setStatusExecucao(new StatusExecucao(StatusExecucao.CANCELADO));
			universalManager.save(status);
		} catch (Exception e) {
			ExcecaoUtil.tratarExcecao(e);
		}
		getSessionMap().put("idAnimal", animal.getId());

		return redirect("manejoExibicao.jsf");
	}

	@SuppressWarnings("unchecked")
	public String finalizar() {
		try {
			StatusManejo status = new StatusManejo();
			status.setDtCadastro(new Date());
			status.setManejoAnimal(new ManejoAnimal(manejoAux.getId()));
			status.setMotivo(motivoFinalizar);
			status.setStatusExecucao(new StatusExecucao(StatusExecucao.FINALIZADO));
			universalManager.save(status);
		} catch (Exception e) {
			ExcecaoUtil.tratarExcecao(e);
		}
		getSessionMap().put("idAnimal", animal.getId());

		return redirect("manejoExibicao.jsf");
	}

	public void loadVisualizar() {
		try {
			manejoAux = (ManejoAnimal) universalManager.get(ManejoAnimal.class, manejoAux.getId());
			motivoVisualizar = manejoAux.getStatusAtual().getMotivo();
		} catch (Exception e) {
			ExcecaoUtil.tratarExcecao(e);
		}
	}

	@Override
	public ManejoAnimal createModel() {
		return new ManejoAnimal();
	}

	@Override
	public String getQualifiedName() {
		return "Manejo";
	}

	@Override
	public boolean isFeminino() {
		return false;
	}

	@Override
	public Map<String, String> getFilters() {
		if (animal != null && animal.getId() != null) {
			this.filters.put("animal.id", animal.getId().toString());
		} else {
			this.filters.put("animal.id", "0");
		}
		return this.filters;
	}

	public Animal getAnimal() {
		return animal;
	}

	public void setAnimal(Animal animal) {
		this.animal = animal;
	}

	public ManejoAnimal getManejoAux() {
		return manejoAux;
	}

	public void setManejoAux(ManejoAnimal manejoAux) {
		this.manejoAux = manejoAux;
	}

	public String getMotivoVisualizar() {
		return motivoVisualizar;
	}

	public void setMotivoVisualizar(String motivoVisualizar) {
		this.motivoVisualizar = motivoVisualizar;
	}

	public String getMotivoCancelar() {
		return motivoCancelar;
	}

	public void setMotivoCancelar(String motivoCancelar) {
		this.motivoCancelar = motivoCancelar;
	}

	public String getMotivoFinalizar() {
		return motivoFinalizar;
	}

	public void setMotivoFinalizar(String motivoFinalizar) {
		this.motivoFinalizar = motivoFinalizar;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

}
